// 汉诺塔

// 递归
/*
整个过程分为3步
假设总共有n个盘子，有三根柱子source helper dest
那么先通过dest将n-1个盘子从source移动到helper中
然后将最后那个盘子从source移动到dest
最后通过source将helper中的n-1个盘子移动到dest中
 */

function hanoi (plants, source = 'a', helper = 'b', dest = 'c', moves = []) {
  if (plants <= 0) {
    return moves
  }
  if (plants === 1) {
    moves.push(`${source}->${dest}`)
  } else {
    hanoi(plants - 1, source, dest, helper, moves) // 使用dest作用中转，将source上的n-1个盘子移动到helper中
    moves.push(`${source}->${dest}`) // 将source上剩下的那个盘子放到dest中
    hanoi(plants - 1, helper, source, dest, moves) // 将helper上的n-1个盘子通过source中转，移动到dest中
  }
  return moves
}

console.log(hanoi(3))

// 栈写法
// 看了下，意义不大，道理还是上面的道理，只是新加了3个stack
